package org.zhadoop.stream.cql.semanticanalyzer;

import java.util.List;

import org.zhadoop.stream.api.streams.Schema;
import org.zhadoop.stream.cql.exception.SemanticAnalyzerException;
import org.zhadoop.stream.cql.semanticanalyzer.analyzecontext.AnalyzeContext;

/**
 * 语义分析的接口
 * 
 * 语义分析发生在所有的CQL语句都完成语法分析之后，
 * 语义分析是有顺序的，必须按照流使用的先后顺序进行分析
 * 
 * 语义分析功能如下
 * 1：重新组织语义分析的结果，比如表达式，函数之类
 * 2：检查各种数据类型是否一致
 * @author zwd
 *
 */
public interface SemanticAnalyzer {
	
	/**
	 * 初始化语义分析器
	 * @param schemas
	 * @throws SemanticAnalyzerException
	 */
	void init(List<Schema> schemas) throws SemanticAnalyzerException;
	
	/**
	 * 语义分析
	 * @return
	 * @throws SemanticAnalyzerException
	 */
	AnalyzeContext analyze() throws SemanticAnalyzerException;
}
